package cn.cool;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;

public class MemoryLeakTest {
    private static final Map<Long, User> LOGIN_USER_CACHE = new ConcurrentHashMap<>();

    public static void main(String[] args) throws InterruptedException {
        // 1. 用户登录 ： 创建用户信息，保存到 LOGIN_USER_CACHE Map中
        long id = 0;
        while (true) {
            for (int i = 0; i < 100; i++) {
                User user = new User(++id, UUID.randomUUID().toString());
                LOGIN_USER_CACHE.put(user.id, user);
            }

            TimeUnit.SECONDS.sleep(5);
        }


        // 2. 在后续逻辑中，可以通过id获取user信息


        // 3. 如果用户退出，那么也应该从 LOGIN_USER_CACHE 中移除用户的信息
        // 3.1. 如果不移除，那么就会造成内存泄漏，即一个不再使用的对象，由于有强引用关联，这个user信息并不能被gc
    }
}

class User {
    public Long id;
    public String info;

    public User(Long id, String info) {
        this.id = id;
        this.info = info;
    }
}